package cn.com.egova.demoapplication;

import android.os.Bundle;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.Button;
import android.widget.ImageView;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import cn.com.egova.demoapplication.base.BaseActivity;

/**
 * ViewPropertyAnimatorActivity是一个非常非常实用的类.
 * 总结起来就是：
 * 1. 这个类操作View对象的。
 * 2. 提供链式调用设置多个属性动画，这些动画同时进行的。
 * 3. 更好的性能，多个属性动画是一次同时变化，只执行一次UI刷新。
 * 4. 每个属性提供两种类型方法设置。
 * 5. 这个类只能通过View的animate()获取引用进行通话设置。
 * 6. 提供重要的set方法,如 setDuration(), setInterpolator(), setStartDelay(), setUpdateListener(), setListener()等.
 * <p>
 * 使用
 * imageView.animate()
 * .setDuration(4000)
 * .rotationY(45f)
 * .translationX(imageView.getWidth())
 * .alpha(0f);
 * <p>
 * 缺点:
 * 1.不支持指定起始变化点, 只能从原始状态变化到目的状态.
 * 2.使用此种方法进行动画,如果对某一个控件进行多个动画(如本例),则需注意,上一个动画设置的相关属性,比如Interpolator,
 * Duration等会保持给下一个动画, 如果下一个动画有不同的需求,需要对这些属性重新进行设置.
 */
public class ViewPropertyAnimatorActivity extends BaseActivity {

    @InjectView(R.id.btn_alpha)
    Button btnAlpha;
    @InjectView(R.id.btn_translate)
    Button btnTranslate;
    @InjectView(R.id.btn_rotate)
    Button btnRotate;
    @InjectView(R.id.btn_scale)
    Button btnScale;
    @InjectView(R.id.btn_combile)
    Button btnCombile;
    @InjectView(R.id.iv)
    ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_property_animator);
        ButterKnife.inject(this);

    }

    @Override
    public boolean isBackIconVisible() {
        return true;
    }

    @OnClick({R.id.btn_alpha, R.id.btn_translate, R.id.btn_rotate, R.id.btn_scale, R.id.btn_combile})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_alpha:
                iv.animate().alpha(0.1f).setDuration(3000);
                break;
            case R.id.btn_translate:
//                iv.animate().translationX(300f).translationY(400f).setDuration(3000);
                iv.animate().translationXBy(50f).translationYBy(50f).setInterpolator(new BounceInterpolator()).setDuration(3000);;

                break;
            case R.id.btn_rotate:
//                iv.animate().rotation(90f).setDuration(3000);
//                iv.animate().rotationY(90f).setDuration(3000);
                iv.animate().rotationYBy(90).setDuration(3000);
                break;
            case R.id.btn_scale:
                iv.animate().scaleX(1.5f).scaleY(1.5f).setDuration(1000);
                break;
            case R.id.btn_combile:
                iv.animate().alpha(0.1f).x(300f).y(300).scaleX(1.5f).scaleY(1.5f).setDuration(3000);
                break;
        }
    }
}
